﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;
using BGCOP.CAVTOP.BUSINESSLAYER;
using BGCOP.CAVTOP.COMMON;

namespace BGCOP.CAVTOP.WINFORMS
{
    public partial class frmUsuario : Form
    {
        //definicion de variales de la clase
        private LogCls logF = new LogCls();
        public Utilitys ut = new Utilitys();
        private static ClassSeguridad secu= new ClassSeguridad();
        private string passActual = "123";
        private string passNuevo = "123";
        private byte[] passActualMD5;
        private byte[] passNuevoMD5;
        private bool cambio = false;
        //fin de definiciones

        public frmUsuario()
        {
            InitializeComponent();
        }

        private void button5_Click(object sender, EventArgs e)
        {
            //verificar la toma de la imagen desde el recusros seleccionado
            if (radioButton1.Checked)
            {
               //desde archivo existente 
                openFileDialog1.ShowDialog();
                string ubicacion = openFileDialog1.FileName;
                if (ubicacion.Length > 0)
                {
                    try
                    {
                        fotoUsuario.BackgroundImage = new Bitmap(ubicacion);
                    }
                    catch (Exception ex)
                    {
                        
                        fotoUsuario.BackgroundImage = Properties.Resources.personal;
                    }
                }
            }
            else if (radioButton2.Checked )
            {
                //desde camara conectada al equipo
                frmCamara wc = new frmCamara();
                wc.u = fotoUsuario;
                wc.ShowDialog();
            }
        }

        private void button7_Click(object sender, EventArgs e)
        {
            //cambia la contraseña actual del usuario
            string contra = Microsoft.VisualBasic.Interaction.InputBox("Digite la contraseña", "CAV12", "123");
            string contra2 = Microsoft.VisualBasic.Interaction.InputBox("Digite nuevamente la contraseña", "CAV12", "123");
            if (contra == contra2)
            {
                passNuevo = contra;
                MessageBox.Show("Para guardar los cambios, haga click en el botón actualizar.", Properties.Settings.Default.Titulo,
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                cambio = true;
            }
            else
            {
                MessageBox.Show("Verifique la información suministrada. No coinciden las contraseñas!", Properties.Settings.Default.Titulo,
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                cambio = false;
            }
        }

        private void button6_Click(object sender, EventArgs e)
        {
            fotoUsuario.BackgroundImage = Properties.Resources.personal;
        }

        private void frmUsuario_Load(object sender, EventArgs e)
        {
            logF.FilePath = System.IO.Path.GetDirectoryName(
      System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
            Usuarios usu = new Usuarios();
            listBox1.DataSource = usu.ListarTodosLosUsuarios();
            listBox1.DisplayMember = "nombre";
            listBox1.ValueMember = "idUsuario";
            TiposUsuarios tpu = new TiposUsuarios();
            cmbTipoUser.DataSource = tpu.ListarTodosLosTipos();
            cmbTipoUser.DisplayMember = "NombreTipoUsuario";
            cmbTipoUser.ValueMember = "idTipoUsuario";
            txtNombre.Focus();
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (listBox1.SelectedIndex == -1)
            {
                return;
            }
            TUsuario usu = (TUsuario)listBox1.SelectedItem;
            txtNombre.Text = usu.nombre;
            txtLogin.Text = usu.login;
            cmbTipoUser.SelectedValue = usu.idTipoUsuario;
            fotoUsuario.BackgroundImage = ut.Bytes2Image(usu.fotoUsuario);
            chlActivo.Checked = (usu.activo == 1);
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            txtNombre.Focus();
            listBox1.SelectedIndex = -1;
            fotoUsuario.BackgroundImage = Properties.Resources.personal;
            txtNombre.Text = "";
            txtLogin.Text = "";
            cmbTipoUser.SelectedIndex = -1;
            passNuevo = "123";
            chlActivo.Checked = false;
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            Usuarios usu = new Usuarios();
            if (MessageBox.Show("Desea eliminar el registro seleccionado?", "Gestion CAV12", 
                MessageBoxButtons.YesNoCancel) == DialogResult.Yes)
            {
                usu.EliminarUsuario(Convert.ToInt32(listBox1.SelectedValue));
            }

            listBox1.DataSource = usu.ListarTodosLosUsuarios(); 
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (listBox1.SelectedIndex == -1)
            {

                //agragr un nuevo usuario

                TUsuario tmp = new TUsuario();
                tmp.nombre = txtNombre.Text;
                tmp.login = txtLogin.Text;
                tmp.idTipoUsuario = (int?)cmbTipoUser.SelectedValue;
                tmp.fechaUltimaGestion = DateTime.Now;
                tmp.fotoUsuario = ut.Image2Bytes(fotoUsuario.BackgroundImage);

                tmp.password = secu.GetMd5Hash(passNuevo);
                tmp.usuarioUltimaGestion = ut.IdUsuarioActual;
                tmp.activo = (short?)(chlActivo.Checked == true ? 1 : 0);
                Usuarios usu = new Usuarios();
                usu.AgregarUsuario(tmp, ut.IdUsuarioActual);
                MessageBox.Show("El usuario se agrego con exito!", "Gestion CAV12", MessageBoxButtons.OK);
                listBox1.DataSource = usu.ListarTodosLosUsuarios();
            }
            else
            {
                //modificar un usuarios
                TUsuario tmp = new TUsuario();
                tmp.nombre = txtNombre.Text;
                tmp.login = txtLogin.Text;
                tmp.idTipoUsuario = (int?)cmbTipoUser.SelectedValue;
                tmp.fechaUltimaGestion = DateTime.Now;
                tmp.fotoUsuario = ut.Image2Bytes(fotoUsuario.BackgroundImage);
                if (cambio == true)
                {
                    //cambio la contresña
                    tmp.password = secu.GetMd5Hash(passNuevo);
                }
                else
                {
                    //no cambio contraseña
                    TUsuario yu = (TUsuario)listBox1.SelectedItem;

                    tmp.password = yu.password;
                }
                cambio = false;
                tmp.usuarioUltimaGestion = ut.IdUsuarioActual;
                tmp.activo = (short?)(chlActivo.Checked == true ? 1 : 0);
                Usuarios usu = new Usuarios();
                usu.ModificarUsuario((int)listBox1.SelectedValue, tmp, ut.IdUsuarioActual);
                MessageBox.Show("El usuario se modificó con exito!", "Gestion CAV12", MessageBoxButtons.OK);
                listBox1.DataSource = usu.ListarTodosLosUsuarios();
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        
    }

}
